#include <math.h>
#include <vector>
#include <algorithm>
using namespace std;
#define eps 1E-8
struct P
{ 
	double x, y;
	P(double x=0, double y=0): x(x), y(y) {}
};
P operator +(P a, P b) { return P(a.x+b.x, a.y+b.y); }
P operator -(P a, P b) { return P(a.x-b.x, a.y-b.y); }
P operator *(P a, double b) { return P(a.x*b, a.y*b); }
double operator &(P a, P b) { return a.x*b.x+a.y*b.y; }
double operator *(P a, P b) { return a.x*b.y-a.y*b.x; }
double operator !(P a) { return sqrt(a&a); }
P operator ~(P a) { return P(-a.y, a.x); }
int a[3];
P p[4];
double get(P t)
{
	int i;
	double r;
	for(r=1E20, i=0; i<4; r=min(r, !(p[i]-t)), i++);
	return r;
}
double ans()
{
	int i, j;
	double vv, tv, bv, l;
	P v, b, t;
	p[0]=P(0, -a[2]);
	p[1]=P(a[1]+a[2], -a[1]);
	p[2]=P(-a[0], a[0]+a[2]);
	p[3]=P(-a[2], 0);
	b=P(a[1], a[0]);
	bv=get(b);
	for(i=0; i<=1000; i++)
	{
		v=P(a[1]-a[0]+i/1000.0*a[0], i/1000.0*a[0]);
		vv=get(v);
		l=a[0]/2000.0;
		for(j=0; j<100; l/=1.2, j++)
		{
			t=v+P(l, l);
			if(t.x>0 && t.x<a[1] && t.y>0 && t.y<a[0])
			{
				tv=get(t);
				if(tv>vv) { v=t; vv=tv; }
			}
			t=v-P(l, l);
			if(t.x>0 && t.x<a[1] && t.y>0 && t.y<a[0])
			{
				tv=get(t);
				if(tv>vv) { v=t; vv=tv; }
			}
		}
		if(vv>bv) { b=v; bv=vv; }
	}
	return bv;
}
int main()
{
	scanf("%d%d%d", &a[0], &a[1], &a[2]);
	sort(a, a+3);
	printf("%.13lf\n", ans());
	return 0;
}